#include "Template.h"
#include <iostream>

using namespace std;

AbstractClass::AbstractClass() {
}

AbstractClass::~AbstractClass() {
}

void AbstractClass::TemplateMethod() {
  this->PrimitiveOperation1();
  this->PrimitiveOperation2();
}

ConcreteClass1::ConcreteClass1() {
}

ConcreteClass1::~ConcreteClass1() {
}

void ConcreteClass1::PrimitiveOperation1() {
  cout << "ConcreteClass1...PrimitiveOperation1" << endl;
}

void ConcreteClass1::PrimitiveOperation2() {
  cout << "ConcreteClass1...PrimitiveOperation2" << endl;
}

ConcreteClass2::ConcreteClass2() {
}

ConcreteClass2::~ConcreteClass2() {
}

void ConcreteClass2::PrimitiveOperation1() {
  cout << "ConcreteClass2...PrimitiveOperation1" << endl;
}

void ConcreteClass2::PrimitiveOperation2() {
  cout << "ConcreteClass2...PrimitiveOperation2" << endl;
}
